import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JScrollPane;
import javax.swing.JList;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.ListSelectionModel;


public class VueRechercheMotCle extends Vue {
	private JPanel contentPane;
	private JButton btnRechercher;
	private JButton btnAnnuler;
	private JList list;
	private JTextArea textAreaArticle;
	private JTextArea textAreaOuvrages;
	private JButton btnAnnuler_1;
	private JButton btnFermer;
	Vector<String> vectMotsCles= new Vector();
	private JButton btnTest;
	private JLabel lblResultatDeLa;
	private int nbOuv=0;
	private int nbArt=0;
	private JLabel lblArticles;
	private JLabel lblOuvrages;

	public VueRechercheMotCle(Controleur controleur) {
		super(controleur);
		
		setTitle("Recherche par mots cles");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 442, 554);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		
		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(25, 41, 178, 165);
		contentPane.add(scrollPane);

		list = new JList();
		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		scrollPane.setViewportView(list);
		
		JLabel lblSelectionnezUnMot = new JLabel("Selectionnez un mot cle :");
		lblSelectionnezUnMot.setBounds(25, 14, 188, 15);
		contentPane.add(lblSelectionnezUnMot);
		
		btnAnnuler = new JButton("Annuler");
		btnAnnuler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getControleur().fermerVue(VueRechercheMotCle.this);
			}
		});
		btnAnnuler.setBounds(238, 181, 117, 25);
		contentPane.add(btnAnnuler);
		
		btnRechercher = new JButton("Rechercher");
		btnRechercher.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(!list.isSelectionEmpty()){
					MotsCles m=getControleur().getMotCle((String)list.getSelectedValue());
					getControleur().alimenteOuvrageMot(m);
					getControleur().alimenteArticleMot(m);
					lblResultatDeLa.setText("Resultat de la recherche pour le mot clé "+(String)list.getSelectedValue());
					lblArticles.setText("Articles : "+nbArt);
					lblOuvrages.setText("Ouvrages : "+nbOuv);
					setEtat(inter1);
				}
				else{
					Message dialog = new Message("Vous devez selectionner un mot cle pour lancer la recherche.");
					dialog.setVisible(true);
				}
			}
		});
		btnRechercher.setBounds(238, 144, 117, 25);
		contentPane.add(btnRechercher);
		
		JScrollPane scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(24, 284, 179, 190);
		contentPane.add(scrollPane_1);
		
		textAreaArticle = new JTextArea();
		textAreaArticle.setEditable(false);
		scrollPane_1.setViewportView(textAreaArticle);
		
		JScrollPane scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(238, 284, 170, 190);
		contentPane.add(scrollPane_2);
		
		textAreaOuvrages = new JTextArea();
		textAreaOuvrages.setEditable(false);
		scrollPane_2.setViewportView(textAreaOuvrages);
		
		lblArticles = new JLabel("Articles :");
		lblArticles.setBounds(25, 257, 178, 15);
		contentPane.add(lblArticles);
		
		lblOuvrages = new JLabel("Ouvrages :");
		lblOuvrages.setBounds(238, 257, 137, 15);
		contentPane.add(lblOuvrages);
		
		lblResultatDeLa = new JLabel("Resultat de la recherche pour le mot clé");
		lblResultatDeLa.setBounds(25, 230, 383, 15);
		contentPane.add(lblResultatDeLa);
		
		btnFermer = new JButton("Fermer");
		btnFermer.setEnabled(false);
		btnFermer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				getControleur().fermerVue(VueRechercheMotCle.this);
			}
		});
		btnFermer.setBounds(238, 488, 117, 25);
		contentPane.add(btnFermer);
		
		btnAnnuler_1 = new JButton("Annuler");
		btnAnnuler_1.setEnabled(false);
		btnAnnuler_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				setEtat(initiale);
			}
		});
		btnAnnuler_1.setBounds(86, 486, 117, 25);
		contentPane.add(btnAnnuler_1);
		
	}
	
	public void alimente(MotsCles m) {
		//alimente le vecteur vectMotsCles du motscles courrant
		vectMotsCles.addElement(m.getMot());
		//alimente la liste
		list.setListData(vectMotsCles);
	}
	
	public void alimente(Ouvrage o) {
		nbOuv=nbOuv+1;
		String titre=o.getTitre();
		String editeur=o.getEditeur();
		GregorianCalendar date=o.getDateEdition();
		HashSet<Auteur> auteurs=o.getAuteurs();
		textAreaOuvrages.append("\nTitre : "+titre+"\nEditeur : "+editeur+"\nDate : "+(date.get(Calendar.MONTH)+1) + "/" + date.get(Calendar.YEAR)+"\nAuteurs :");
		Iterator<Auteur> it = auteurs.iterator();
		while (it.hasNext()){
			Auteur a=it.next();
			String nom=a.getNom();
			String prenom=a.getPrenom();
			textAreaOuvrages.append("\n   "+nom+" "+prenom);
		}
	}
	
	public void alimente(Article a) {
		nbArt=nbArt+1;
		String titre=a.getTitre();
		int numPar=a.getParution().getNumero();
		String titrePerio=a.getParution().getPeriodique().getNomp();
		int numeropage=a.getPage();
		HashSet<Auteur> auteurs=a.getAuteurs();
		textAreaArticle.append("\nTitre Periodique : "+titrePerio+ "\nNumero Parution : "+numPar+"\nTitre Article : "+titre+"\nNumero de page : "+numeropage+"\nAuteurs : ");
		Iterator<Auteur> it = auteurs.iterator();
		while (it.hasNext()){
			Auteur aut=it.next();
			String nom=aut.getNom();
			String prenom=aut.getPrenom();
			textAreaArticle.append("\n   "+nom+" "+prenom);
		}
	}
	public void alimenteOuvrageVide() {
		textAreaOuvrages.append("Il n'y a aucun ouvrage associé à ce mot clé.");
	}
	
	public void alimenteArticleVide() {
		textAreaArticle.append("Il n'y a aucun article associé à ce mot clé.");
	}	
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale:{
			//appel de la recherche de tout les mots cles //
			HashMap<String, MotsCles> motscles;
			motscles= new HashMap<String, MotsCles>();
			motscles=getControleur().rechMotsCles();
			getControleur().alimenteMotsCles(motscles);
			//fin de la recherche de tout les mots cles //
			btnRechercher.setEnabled(true);
			btnAnnuler.setEnabled(true);
			btnAnnuler_1.setEnabled(false);
			btnFermer.setEnabled(false);
			textAreaOuvrages.setEditable(false);
			textAreaArticle.setEditable(false);
			textAreaOuvrages.setText(null);
			textAreaArticle.setText(null);
			nbOuv=0;
			nbArt=0;
			break;
		}
		case inter1:{
			btnRechercher.setEnabled(false);
			btnAnnuler.setEnabled(false);
			btnAnnuler_1.setEnabled(true);
			btnFermer.setEnabled(true);
			textAreaOuvrages.setEditable(true);
			textAreaArticle.setEditable(true);
			break;
		}
		}
	}
}
